package com.hxq.library.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 非法访问拦截
 *        拦截的资源
 *           拦截所有资源  /*
 *        需要放行的资源
 *           1.放行指定页面（无需登录即可访问的页面 如：登录 注册页面等）
 *           2.放行静态资源（image,js,css文件等）
 *           3.指定操作放行（无需登录就可执行的操作 如：登录操作 注册操作）
 *           4.登录状态放行（判断session中用户信息是否为空）
 */

@WebFilter("/*")
public class loginAccessFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 基于HTTP请求
        HttpServletRequest request1 = (HttpServletRequest) request;
        HttpServletResponse response1 = (HttpServletResponse) response;
        //获取请求路径
        String url = request1.getRequestURI();

//        1.放行指定页面（无需登录即可访问的页面 如：登录 注册页面等）
        if (url.contains("index.jsp")||url.contains("login.jsp")||url.contains("inputNum.jsp")||url.contains("forgetPassword.jsp")||url.contains("changePassword.jsp")||url.contains("booleanLogin.jsp")||url.contains("booleanCode.jsp")||url.contains("booleanChangepwd.jsp")){
            chain.doFilter(request1,response1);
            return;
        }

//        3.指定操作放行（无需登录就可执行的操作 如：登录操作 注册操作）
        if (url.contains("/changePassword")||url.contains("/forgetPassword")||url.contains("/inputNumber")||url.contains("/login")||url.contains("/register")){
            chain.doFilter(request1,response1);
            return;
        }

//        4.登录状态放行（判断session中用户信息是否为空）
        String name = (String) request1.getSession().getAttribute("account");
        if (name != null){
            chain.doFilter(request1,response1);
            return;
        }
        //当用户未登录时，拦截请求跳转到登录页面

        response1.sendRedirect("index.jsp");
    }
    @Override
    public void destroy() {

    }
}
